原理解析

svn有服务端和客服端,服务端开启端口监听,后台运行.但git是一个分布式版本控制器,所以git没有服务端和客户端之分.也就是说git服务端不会监听任何端口,也不会后台运行.

git服务端搭建和客户端搭建没什么区别.使用的是linux带的ssh进行连接和linux文件权限控制进行管理.

设计

首先给定一个目录,该目录下可以创建各种git仓库.该目录归git用户组管理.以后所有需要连接git服务端的用户全放到git用户组下面.

具体实施

开始之前请先安装git,如果不知道怎么安装可以看我这篇文章Linux安装git

  • 创建用户组和存储仓库的文件夹

    我们创建一个git用户组,再创建/home/git目录作为我们git总仓库,以后要添加仓库就在这里添加

    groupadd git mkdir /home/git

  • 创建一个测试用户,给该用户相应权限

    首先通过which git-shell获取服务端git的shell地址,再创建用户,我的git-shell在/usr/local/git/bin/git-shell.

    useradd -g git -s /usr/local/git/bin/git-shell user01 #添加一个用户 passwd user01 #修改用户密码

上面参数我解释下:-g指定用户属于哪个用户组,-s指定用户登陆时使用的shell(每个linux用户登陆后都会被赋予一个shell,用来和linux内核进行交流.我们使用git的shell就能实现该用户只能使用git命令)

  • 使用git初始化一个没有工作区的仓库

    一个git仓库分为工作区和版本控制区,没有工作区就不能在服务端对git仓库进行文件的操作,只能在本地进行操作让服务端进行记录.--bare就是创建裸仓库

    mkdir /home/git/warehouse01.git git init --bare /home/git/warehouse01.git

  • 把创建好的仓库权限赋值给git组

    这个大家注意一下,以后每次创建一个新的仓库,一定要执行下面两个命令,否则git用户组没有权限访问新建的仓库

    chgrp -R git /home/git/<仓库名> chmod -R 775 /home/git/<仓库名>

千万不要偷懒使用, 因为ssh免密登陆需要保证/home/git/.ssh/authorized_k eys的权限是644, 否则不能免密登陆

chgrp -R git /home/git
chmod -R 775 /home/git

测试

根据上面几步我们就能通过user01远程连接git服务端,并进行git相关操作

  • 测试本地从服务端拉取服务端的warehouse01.git

    git clone user01@qiud.top:/home/git/warehouse01.git

上面这个命令我说下,qiud.top是我自己买的域名,和我的服务器ip绑定了,这个位置你有绑定ip的域名可以填域名,没有就填ip.执行上面命令会默认连接22号端口.连接成功后会克隆/home/git/warehouse01.git这个位置的文件夹

测试成功!结果如下: 20200325132955-2021-12-29-16-15-42

  • 测试把本地git仓库关联到远程服务端仓库

    • 添加一个远程仓库并赋予权限

    我们来复习一下怎么添加远程仓库

    mkdir /home/git/warehouse02.git
    cd /home/git/warehouse02.git
    git init -bare
    chgrp -R git /home/git
    chmod -R 775 /home/git
    
    • 本地创建一个git仓库,并写一个文件

      我在d:\git_house下面创建个仓库local_wh_02,并且新建了a.txt文件,添加了aaa作为内容

      mkdir local_wh_02 cd local_wh_02 git init echo 'aaa' > /git_house/local_wh_02/a.txt git add . git commit . -m'aaa'

    • 把本地仓库和远程warehouse02.git关联,并把本地仓库中内容推送给远程仓库

      git remote add server_wh_02 user01@qiud.top:/home/git/warehouse02.git git push -u server_wh_02 master

    顺便说下git push -u server_wh_02 master-u,这个表示本地仓库该仓库与远程仓库server_wh_02建立了连接关系,以后可以直接执行git push等命令,不需要再指明远程仓库地址

    执行成功! 20200325150003-2021-12-29-16-16-03


优化

其实根据以上步骤已经可以正常使用了,不用依赖github, 但是每次远程连接的时候都需要输入密码, 这样很麻烦, 所以我们使用公匙密匙进行无密码登陆.

创建公匙和密匙(已经有的同学可以掠过)

我的公匙保存位置如下图,你们的也差不多

20200325152125-2021-12-29-16-16-43

配置linux服务器的公匙认证

  1. 修改sshd的配置文件

    vi /etc/ssh/sshd_config

20200326120900-2021-12-29-16-16-59

特别说明下公匙存放的位置,是哪个用户登陆的,前面会自动加上家目录.例如:user01登陆,真正的路径是/home/user01/.ssh/authorized_keys 2. 根据公匙存放的位置创建目录

mkdir /home/user01/.ssh
  1. 把本地电脑公匙的内容复制到服务器端

    scp 'C:/Users/球童/.ssh/id_rsa.pub' root@qiud.top:/home/user01/.ssh/authorized_keys

这个地方要注意以下,因为user01的只能使用git,所以用ssh-copy-id是无效的,只能通过root账户把公匙复制到/home/user01/.ssh/authorized_keys 4. 测试

git push
THE END
推荐文章
  • Nodemon stuck at [nodemon] restarting due to changes...

  • node引用本地模块

  • Argument of type '{ recursive: boolean; }' is not assignable to parameter of type 'boolean'

  • 使用docker-compose

  • 黄帝内经-第32篇-刺热篇(1)

  • linux上安装php扩展

  • git推送自动更新应用程序

  • 黄帝内经-第十九篇-玉机真脏论篇(3)

评论 共0条
开启精彩搜索

热门搜索

暂无

历史搜索

用户名/邮箱/手机号
密码
用户名
密码
重复密码
邮箱/手机号
验证码
发送验证码
59秒后可重发
注册
找回密码
邮箱/手机号
验证码
发送验证码
59秒后可重发
新密码
重复密码
请选择支付方式
余额支付

购买将消耗【10

微信支付
微信扫码支付 0 元
[ 04分50秒 ]
请使用微信扫一扫
扫描二维码支付
支付宝支付
支付宝扫码支付 0 元
[ 04分50秒 ]
请使用支付宝扫一扫
扫描二维码支付
已完成支付
未完成支付

请输入验证码

点击验证码可以刷新

你确认吗?

确认

2024年10月1日

0字

0字

2024年10月

0字

新增

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

0字

新增

0字

0字

0字

0字

新增

0字

0字